/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package neuronio;

import java.util.Random;

public class Neuronio
{

  private double[] pesos;
  private double saidaRede;
  private boolean calculado;

  public Neuronio(int tamanhoPesos)
  {
    pesos = new double[tamanhoPesos];
    calculado = false;
    Random gerador = new Random(System.currentTimeMillis());

    for (int i = 0; i < pesos.length; i++)
    {
      pesos[i] = gerador.nextDouble();
    }
  }

  public void calcularSaida(double[] entradas)
  {
    double resultado = 0.0;
    double temp;
    int tamanho;
    
    if (entradas.length != pesos.length)
      throw new RuntimeException("Tamanho do vetor de entradas diferente do tamanho do vetor de pesos.");
    tamanho = entradas.length;
    
    for (int i = 0; i < tamanho; i++)
    {
      temp = entradas[i] - pesos[i];
      resultado += (temp * temp);
      //resultado += Math.pow(entradas[i] - pesos[i], 2);
    }
      
    saidaRede = Math.sqrt(resultado);
    setCalculado(true);
  }

  public void atualizarPeso(double valor, int posicao)
  {
    if (posicao < pesos.length)
    {
      setCalculado(false);
      pesos[posicao] = valor;
    }
  }

  public boolean isCalculado()
  {
    return calculado;
  }

  private void setCalculado(boolean calculado)
  {
    this.calculado = calculado;
  }

  public double getSaidaRede()
  {
    if (isCalculado())
      return saidaRede;
    else
      throw new RuntimeException("Saida ainda nao calculada, chame calcularSaida antes.");
  }

  public double[] getPesos()
  {
    return pesos;
  }

  public void setPesos(double[] pesos)
  {
    this.pesos = pesos;
  }
}
